home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / hexrev / crx / graph.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  4KB  |  164 lines

  1. /*****************************************************
  2.  
  3.     graph.c : 六角リバーシ用グラフィック関連
  4.  
  5.                 Copyright (C) 1997 by Makoto Hiroi
  6.  
  7. -CRX ver by 電魔団\shoryu 2000
  8.  
  9. *****************************************************/
  10. #include    "hexrev.h"
  11.  
  12. #define    STR_COLOR    15
  13. #define    BG_COLOR    9
  14. #define    YELLOW        14
  15.  
  16. /* paint work area size */
  17. #define    WORKSIZE    1024
  18.  
  19. extern const short    zahyou[SIZE][2];
  20. extern int    first_move;
  21. extern int    level;
  22.  
  23. /* 画面を塗りつぶす */
  24. static void fill( int x1, int y1, int x2, int y2, int color )
  25. {
  26.     struct    _fillptr    buff;
  27.     buff.x1 = x1;
  28.     buff.y1 = y1;
  29.     buff.x2 = x2;
  30.     buff.y2 = y2;
  31.     buff.color = color;
  32.     _iocs_fill( &buff );
  33. }
  34.  
  35. /* 線を引く */
  36. static void line( int x1, int y1, int x2, int y2, int color )
  37. {
  38.     struct    _lineptr    buff;
  39.     buff.x1 = x1;
  40.     buff.y1 = y1;
  41.     buff.x2 = x2;
  42.     buff.y2 = y2;
  43.     buff.color = color;
  44.     buff.linestyle = 0xffff;
  45.     _iocs_line( &buff );
  46. }
  47.  
  48. /* ページ 1 へ文字を書く */
  49. static void print_string( int x, int y, int type, char *str, int color )
  50. {
  51.     struct _symbolptr    buff;
  52.     static    int font_size[3] = { 6, 8, 12 };        /* 文字数は半角で数えるので */
  53.     int        len = strlen( str );
  54.     int        x1 = x + (len * font_size[type] - 1);
  55.     int        y1 = y + (font_size[type] * 2 - 1);
  56.     _iocs_apage( 1 );            /* 文字はページ 1 へ */
  57.     fill( x, y, x1, y1, BG_COLOR );    /* クリア */
  58.     buff.x1 = x;
  59.     buff.y1 = y;
  60.     buff.string_address = str;
  61.     buff.mag_x = 1;
  62.     buff.mag_y = 1;
  63.     buff.color = color;
  64.     buff.font_type = type;
  65.     buff.angle = 0;
  66.     _iocs_symbol( &buff );
  67. }
  68.  
  69. /* 駒を描く */
  70. void draw_piece( int num, int piece )
  71. {
  72.     int        x = zahyou[num][0];
  73.     int        y = zahyou[num][1];
  74.     int        color = (piece == BLACK ? 1 : 15);
  75.     char    work[WORKSIZE];
  76.     struct    _paintptr    ptr;
  77.     struct    _circleptr    circle;
  78.     _iocs_apage( 0 );                    /* 石はページ 0 */
  79.  
  80.     if( piece==C_RES ){ color=4; }            /*@@赤色*/
  81.     else if( piece==FREE ){ color=BG_COLOR; }    /*@@ボードの色*/
  82.     circle.x = x;
  83.     circle.y = y;
  84.     circle.radius = 17;
  85.     circle.color = color;
  86.     circle.start = 0;
  87.     circle.end = 360;
  88.     circle.ratio = 256;
  89.     _iocs_circle( &circle );
  90.     ptr.x = x;
  91.     ptr.y = y;
  92.     ptr.color = color;
  93.     ptr.buf_start = work;
  94.     ptr.buf_end   = work + WORKSIZE;
  95.     _iocs_paint( &ptr );
  96. }
  97.  
  98. /* レベルを書く */
  99. void print_level( void )
  100. {
  101.     char    str[8];
  102.     sprintf( str, "LV%d", level );
  103.     print_string( 64 * 4 + 8, 480, 2, str, STR_COLOR );
  104. }
  105.  
  106. /* 先手、後手を表示 */
  107. void print_move( void )
  108. {
  109.     print_string( 64 * 5  + 8, 480, 2, (first_move ? "先手" : "後手"), STR_COLOR );
  110. }
  111.  
  112. /* パレットデータ */
  113. static unsigned short    palet_data[16] = {
  114. /*                          暗い赤    赤   明るい赤 暗い紫   紫    */
  115.     0x0000, 0x39CE, 0x5294, 0x0440, 0x0640, 0x3FCE, 0x0420, 0x056A,
  116. /* 明るい紫 暗い緑    緑   明るい緑 暗い黄   黄色  明るい黄  白    */
  117.     0x0738, 0x8000, 0xB000, 0xF800, 0x9F40, 0xC7C0, 0xEFC0, 0xFFFE,
  118. };
  119.  
  120. /* 画面の初期化 */
  121. void init_screen( void )
  122. {
  123.     int        i;
  124.     _dos_c_curoff();        /* カーソルオフ */
  125.     _dos_c_fnkmod( 2 );        /* ファンクションキーオフ */
  126.     _iocs_ms_init();        /* マウスの初期化 */
  127.     _iocs_ms_curon();        /* マウスを表示 */
  128.     _iocs_skey_mod(0,0,0);    /* ソフトウェアキーボード消去 */
  129.     _iocs_crtmod( 4 );        /* 512*512 16 colors */
  130.     _iocs_g_clr_on();        /* グラフィック表示 */
  131.     /* パレットデータの初期化 */
  132.     for( i = 0; i < 16; i++ ){
  133.         _iocs_gpalet( i, palet_data[i] );
  134.     }
  135.  
  136.     _iocs_apage( 2 );                    /* 背景はページ 2 */
  137.     fill( 0, 0, 511, 511, BG_COLOR );    /* 背景は暗い緑 */
  138.  
  139.     /* 六角形を描画する */
  140.     for( i = 0; i < SIZE; i++ ){
  141.         int        x = zahyou[i][0];
  142.         int        y = zahyou[i][1];
  143.         int        j;
  144.         static  int diff[7][2] = {
  145.             0, -22, -19, -11, -19, 11, 0, 22, 19, 11, 19, -11, 0, -22,
  146.         };
  147.         for( j = 0; j < 6; j++ ){
  148.             line( x + diff[j][0],     y + diff[j][1],
  149.                   x + diff[j + 1][0], y + diff[j + 1][1], 0 );
  150.         }
  151.     }
  152.  
  153. /*    print_string( 32, 480, 2, "六角Reversi", YELLOW );    /* 黄色 */
  154.     print_string( 32, 480, 2, "六角Reversi-", YELLOW );    /* 黄色@@ */
  155.     print_string( 32+144, 480, 2, "CRX", 4 );        /* 赤色@@ */
  156.     print_level();                /* レベル */
  157.     print_move();                /* 先手・後手 */
  158.     print_string( 64 * 6 + 8, 480, 2, "対局", STR_COLOR );
  159.     print_string( 64 * 7 + 8, 480, 2, "終了", STR_COLOR );
  160. }
  161.  
  162. /* end of file */
  163.  
  164.